use compiler::lexer::tokenize;
use std::{env, fs};

fn main() {
    // 收集命令行参数
    let args: Vec<String> = env::args().collect();

    // 检查是否提供了文件名
    if args.len() < 2 {
        eprintln!("Usage: {} <filename>", args[0]);
        std::process::exit(1);
    }

    // 获取文件名
    let filename = &args[1];

    // 读取输入文件
    let input = fs::read_to_string(filename).unwrap_or_else(|err| {
        eprintln!("Error reading file '{}': {}", filename, err);
        std::process::exit(1);
    });

    // 词法分析
    match tokenize(&input) {
        Ok(tokens) => {
            // 输出结果，格式为：token类型 token文本 at Line 行号.
            for (token, line_no) in tokens {
                eprintln!(
                    "{} {} at Line {}.",
                    token.get_type_name(),
                    token.get_text(),
                    line_no
                );
            }
        }
        Err(error_msg) => {
            eprintln!("{}", error_msg);
            std::process::exit(1);
        }
    }
}
